package 银行管理系统;
import java.util.Arrays;
import java.util.Scanner;

public class Bank {
    //引入Scanner类获取用户输入的值
    Scanner input = new Scanner(System.in);
    //定义保存已注册的用户数据
    User[] users = new User[3];
    int cardNo = 3;
    int size = 3;//数组中的小标

    //初始化方法（如果存在一些程序起始时必须要执行的代码，则写入初始化方法initial中）
    Bank() {
        users[0] = new User(1, "131000199811115671", "小红", "12345678", "12345670001", 1000.00);
        users[1] = new User(2, "131000199811115672", "小黑", "12345678", "12345670002", 2000.00);
        users[2] = new User(3, "131000199811115673", "小明", "12345678", "12345670003", 3000.00);
    }

    //欢迎界面
    public void welcomeMenu() {
        System.out.println("-------欢迎使用中国建设银行ATM自助服务-------");
        System.out.println("---      1.登录    2.开户    0.退出     ---");
        System.out.println("------------------------------------------");
        System.out.print("请输入操作编码：");
        int choice = input.nextInt();//将用户输入的数据转换成int类型
        switch (choice) {
            case 1:
                login();//输入1，登录功能
                break;
            case 2:
                register();//输入2注册开户功能
            case 0:
                System.exit(0);
            default:
                System.out.println("输入有误，请从新输入");
        }

    }

    ////t退出功能
//    private void exit() {
//        System.out.println("系统已退出......");
//        System.exit(0);
//    }
    //登录功能
    private void login() {
        System.out.println("请输入测试卡号1~3");
        int cardNum = input.nextInt();
        System.out.println("请输入密码为8~16位");
        String pwd = input.next();
        //对输入的账号密码进行校验
        User check = loginCheck(cardNum, pwd);
        if (check != null) {
            this.showMenu(check);
        } else {
            System.out.println("用户名或密码错误！请重新输入！");
            login();
        }

    }

    private void showMenu(User user) {
        int choice;//对功能进行选择
        do {
            System.out.println("-------------------------欢迎使用中国建设银行ATM自助服务-------------------------");
            System.out.println("1.存款  2.取款  3.转账  4.查询余额  5.修改密码  6.修改预留手机号  7.注销账户  8.查看个人基本信息  0.退出");
            System.out.println("------------------------------------------------------------------------------");
            System.out.print("请输入操作编码：");
            choice = input.nextInt();
            switch (choice) {
                case 1:
                    deposit(user);
                    break;
                case 2:
                    withdraw(user);
                    break;
                case 3:
                    deposit(user);
                    break;
                case 4:
                    this.inquire(user);
                    break;
                case 5:
                    this.inquire(user);
                    break;
                case 6:
                    this.inquire(user);
                    break;
                case 7:
                    this.inquire(user);
                    break;
                case 8:
                    this.showUser(user);
                    welcomeMenu();
                    break;
                case 0:
                    System.out.println("谢谢使用！");
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入有误！请重新输入！");
            }
        } while (true);
    }
//取款
    private void withdraw(User user) {
        System.out.println("请输入您要取款的金额");
        boolean flag=true;
        while (flag){
            double money= input.nextDouble();
            if(money>0&&money<user.getBalance()){//输入的金额大于0 并且小于当前用户的余额 就可以取款成功
                user.setBalance(user.getBalance()-money);
                System.out.println(user.getUserName()+"取款成功！当前余额为:"+user.getBalance()+"元!");
                flag=false;//只允许用户单次操作   取款成功后跳出循环
            }else {
                System.out.println("输入有误或者是余额不足");
            }
        }
    }

    //展示用户信息
    private void showUser(User user) {
        System.out.println("姓名为:" + user.getUserName() + "         卡号：" + user.getCardNo() + "         手机号码为:" + user.getPhone() + "");
    }

    //查看余额
    private void inquire(User user) {
        System.out.println("当前账户余额为:" + user.getBalance() + "元!");
    }

    //存款功能
    private void deposit(User user) {
        System.out.println("请输入存大于0的存款金额:");
        boolean flag = true;
        while (flag) {
            double money = input.nextDouble();
            if (money > 0) {
                user.setBalance(user.getBalance() + money);
                System.out.println("存款成功！");
                flag = false;
            } else {
                System.out.println("请重新输入大于0的金额");
            }
        }
    }

    //对用输入输入的账号密码进行校验
    private User loginCheck(int cardNum, String pwd) {
        for (int i = 0; i < size; i++) {//对每个数组对象的小标进行了标记
            //验证卡号，密码
            if (users[i] != null) {
                if (cardNum == users[i].getCardNo() && pwd.equals(users[i].getPassWord())) {//验证账号密码是否一样
                    return users[i];
                }
            }
        }
        return null;
    }

    //注册功能----涉及到扩容机制
    private void register() {
        System.out.println("请输入你的姓名：");
        String userName = input.next();
        String identity;//身份证号码
        do {
            System.out.print("请输入18位身份证号码：");
            identity = input.next();
        } while (identity.length() != 18);
        String phone;
        do {
            System.out.print("请输入11位预存手机号码：");
            phone = input.next();
        } while (phone.length() != 11);
        String passWord;
        do {
            System.out.print("请输入8-16位的密码：");
            passWord = input.next();
        } while (passWord.length() < 8 || passWord.length() > 16);//密码8~16位
        double money;
        do {
            System.out.print("请输入预存金额（大于等于10元）：");
            money = input.nextInt();
        } while (money < 10);
        //将用户输入的信息储存到一个对象里边
        User user = new User();
        user.setCardNo(cardNo);//卡号
        user.setUserName(userName);//用户姓名
        user.setIdentity(identity);//身份证
        user.setPassWord(passWord);//设置密码
        user.setBalance(money);//首次存入的钱
        System.out.println("恭喜您，开户成功，您的卡号为:" + cardNo++);
        //将该对象存储到users数组中
        //扩容判断
        if (size > (users.length - 1)) {
            //定义一个新的数组将原始数组的长度复制到新的数组
//            User[] newUser = Arrays.copyOf(users, size + 1);
            //将新数组赋值给就数组
            users = Arrays.copyOf(users, size + 1);
            //数组长度的赋值
            users[size] = user;
        }
        size++;//每次开户成功就将size++
    }
}
